/**
 * FileName: DescribeInstances
 *
 * @author: 阿张
 * Date:     2021/3/9 19:32
 */
package com.qx.controller;

import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
// 导入对应产品模块的 client
import com.tencentcloudapi.cvm.v20170312.CvmClient;
// 导入要请求接口对应的 request response 类
import com.tencentcloudapi.cvm.v20170312.models.DescribeInstancesRequest;
import com.tencentcloudapi.cvm.v20170312.models.DescribeInstancesResponse;
import com.tencentcloudapi.cvm.v20170312.models.Filter;
//导入可选配置类
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.common.profile.Language;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("describe")
public class DescribeInstances {

    @RequestMapping("getDesc")
    public void getDesc(){
        try {
            // 实例化一个认证对象，入参需要传入腾讯云账户 secretId、secretKey，此处还需注意密钥对的保密
            Credential cred = new Credential("AKIDUzPaVOKn8G8mxwq8rMaW0uaUFrpXYm5B", "3FJ40lhOrqeMYbIp33pKEhwOcYEnHeV8");
            // 实例化一个 http 选项，可选的，没有特殊需求可以跳过
            HttpProfile httpProfile = new HttpProfile();
            //  从3.1.16版本开始, 单独设置 HTTP 代理
            // httpProfile.setProxyHost("真实代理ip");
            // httpProfile.setProxyPort(真实代理端口);
            httpProfile.setReqMethod("GET"); // get 请求(默认为post请求)
            httpProfile.setProtocol("https://");  // 在外网互通的网络环境下支持 http 协议（默认是 https 协议），请选择(https:// or http://)
            httpProfile.setConnTimeout(30); // 请求连接超时时间，单位为秒（默认60秒）
            httpProfile.setWriteTimeout(30);  // 设置写入超时时间，单位为秒（默认0秒）
            httpProfile.setReadTimeout(30);  // 设置读取超时时间，单位为秒（默认0秒）
            httpProfile.setEndpoint("cvm.ap-shanghai.tencentcloudapi.com"); // 指定接入地域域名（默认就近接入）
            // 实例化一个 client 选项，可选的，没有特殊需求可以跳过
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setSignMethod("HmacSHA256"); // 指定签名算法（默认为 HmacSHA256）
            // 自3.1.80版本开始，SDK 支持打印日志。
            clientProfile.setHttpProfile(httpProfile);
            clientProfile.setDebug(true);
            // 从3.1.16版本开始，支持设置公共参数 Language, 默认不传，选择（ZH_CN or EN_US）
            clientProfile.setLanguage(Language.EN_US);
            // 实例化要请求产品（以 cvm 为例）的 client 对象，clientProfile 是可选的
            CvmClient client = new CvmClient(cred, "ap-shanghai", clientProfile);
            // 实例化一个 cvm 实例信息查询请求对象，每个接口都会对应一个 request 对象。
            DescribeInstancesRequest req = new DescribeInstancesRequest();
            // 填充请求参数，这里 request 对象的成员变量即对应接口的入参
            // 您可以通过官网接口文档或跳转到 request 对象的定义处查看请求参数的定义
            Filter respFilter = new Filter(); // 创建 Filter 对象, 以 zone 的维度来查询 cvm 实例
            respFilter.setName("zone");
            respFilter.setValues(new String[] { "ap-shanghai-1", "ap-shanghai-2" });
            req.setFilters(new Filter[] { respFilter }); // Filters 是成员为Filter对象的列表
            // 通过 client 对象调用 DescribeInstances 方法发起请求。注意请求方法名与请求对象是对应的
            // 返回的 resp 是一个 DescribeInstancesResponse 类的实例，与请求对象对应
            DescribeInstancesResponse resp = client.DescribeInstances(req);
            // 输出 json 格式的字符串回包
            System.out.println(DescribeInstancesResponse.toJsonString(resp));
            // 也可以取出单个值。
            // 您可以通过官网接口文档或跳转到 response 对象的定义处查看返回字段的定义
            System.out.println(resp.getTotalCount());
        } catch (TencentCloudSDKException e) {
            System.out.println(e.toString());
        }
    }
}
